﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProjectEulerSolutions
{
    /*
     * 
     * Take the number 192 and multiply it by each of 1, 2, and 3:

    192 × 1 = 192
    192 × 2 = 384
    192 × 3 = 576

By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call 192384576 the concatenated product of 192 and (1,2,3)

The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is the concatenated product of 9 and (1,2,3,4,5).

What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, ... , n) where n > 1?

     * 
     * */
    class Problem38
    {
        public static string Calculate()
        {
            List<int> allowedDigits = new List<int>()
            {
                1, 2, 3, 4, 5, 6, 7, 8, 9
            };

            if (CommonFunctions.IsPandigital(121934, allowedDigits))
                Console.WriteLine("True");

            long maxConc = 0;
            int theN = 0;
            int theMaxN = 0;


            int usedNumbers = 0;
            int n = 0;
            do
            {
                n++;
                long concatenation = 0;
                usedNumbers = 0;
                do
                {
                    usedNumbers++;
                    int result = n * usedNumbers;
                    int numDigits = CommonFunctions.NumberOfDigits(result);
                    concatenation *= (long)Math.Pow(10, numDigits);
                    concatenation += result;

                    if (CommonFunctions.IsPandigital(concatenation, allowedDigits))
                    {
                        if (concatenation > maxConc)
                        {
                            theN = n;
                            theMaxN = usedNumbers;
                            maxConc = concatenation;
                        }
                    }
                    else
                    {
                        break;
                    }
                } while (true);

                

            } while (n<100000);

            String results = String.Format("{0}..{1} = {2}", theN, theMaxN, maxConc);

            return results.ToString();
        }
    }
}
